/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.colegiatura.be;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import org.cip.esymons.general.be.ColegiadoEspecialidad;
import org.cip.esymons.general.be.ConsejoDepartamental;
import org.cip.esymons.general.be.DireccionPersona;
import org.cip.esymons.general.be.Directivos;
import org.cip.esymons.general.be.Pais;
import org.cip.esymons.general.be.PersonaNatural;
import org.cip.esymons.general.be.TelefonoSolicitante;

import org.cip.esymons.tesoreria.be.CobroPlanilla;
import org.cip.esymons.tesoreria.be.DelegadoAcotacion;
import org.cip.esymons.tesoreria.be.ExoneracionDescuento;
import org.cip.esymons.tesoreria.be.FondoMortuorio;
import org.cip.esymons.tesoreria.be.Fraccionamiento;
import org.cip.esymons.tesoreria.be.GeneracionCuotas;
import org.cip.esymons.tesoreria.be.RecepcionadorCertificado;
import org.cip.esymons.tesoreria.be.VotacionColegiado;

/**
 *
 * @author ADMINISTRADOR
 */
@Entity
//@PrimaryKeyJoinColumn(name = "col_codigo", referencedColumnName = "sol_codigo")
//@DiscriminatorValue("PN")
@Table(name = "col_colegiado")
//@NamedQueries({@NamedQuery(name = "Colegiado.findAll", query = "SELECT c FROM Colegiado c"), @NamedQuery(name = "Colegiado.findByColCodigo", query = "SELECT c FROM Colegiado c WHERE c.colCodigo = :colCodigo"), @NamedQuery(name = "Colegiado.findByTcoCodigo", query = "SELECT c FROM Colegiado c WHERE c.tcoCodigo = :tcoCodigo"), @NamedQuery(name = "Colegiado.findByPaiCodigo", query = "SELECT c FROM Colegiado c WHERE c.paiCodigo = :paiCodigo"), @NamedQuery(name = "Colegiado.findByColnumeroCip", query = "SELECT c FROM Colegiado c WHERE c.colnumeroCip = :colnumeroCip"), @NamedQuery(name = "Colegiado.findByColestaVivo", query = "SELECT c FROM Colegiado c WHERE c.colestaVivo = :colestaVivo"), @NamedQuery(name = "Colegiado.findByColfechaFallecio", query = "SELECT c FROM Colegiado c WHERE c.colfechaFallecio = :colfechaFallecio"), @NamedQuery(name = "Colegiado.findByColCondicion", query = "SELECT c FROM Colegiado c WHERE c.colCondicion = :colCondicion"), @NamedQuery(name = "Colegiado.findByColfechaHabilidad", query = "SELECT c FROM Colegiado c WHERE c.colfechaHabilidad = :colfechaHabilidad"), @NamedQuery(name = "Colegiado.findByColesVitalicio", query = "SELECT c FROM Colegiado c WHERE c.colesVitalicio = :colesVitalicio")})
public class Colegiado implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "col_codigo", insertable = false, updatable = false)
    private Long solCodigo;
    @Basic(optional = false)
    @Column(name = "col_numeroCip")
    private String colnumeroCip;
    @Basic(optional = false)
    @Column(name = "col_estaVivo")
    private boolean colestaVivo;
    @Column(name = "col_fechaFallecio")
    @Temporal(TemporalType.DATE)
    private Date colfechaFallecio;
    @Column(name = "col_condicion")
    private Boolean colCondicion;
    @Column(name = "col_fechaHabilidad")
    @Temporal(TemporalType.DATE)
    private Date colfechaHabilidad;
    @Column(name = "col_esVitalicio")
    private Boolean colesVitalicio;
    @Column(name = "col_fechaIncorporacion")
    @Temporal(TemporalType.DATE)
    private Date colfechaIncorporacion;
    @Basic(optional = false)
    @Column(name = "col_tipoSangre")
    private String coltipoSangre;
    @Column(name = "col_fechaAporte")
    @Temporal(TemporalType.DATE)
    private Date colfechaAporte;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkSolCodigocol", fetch = FetchType.LAZY)
    private List<ExoneracionDescuento> exoneracionDescuentoCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colegiado", fetch = FetchType.LAZY)
    private List<RecepcionadorCertificado> recepcionadorCertificadoCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colCodigo", fetch = FetchType.LAZY)
    private List<ColegiadoEspecialidad> colegiadoEspecialidadCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colCodigo", fetch = FetchType.LAZY)
    private List<Fraccionamiento> fraccionamientoCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colegiado", fetch = FetchType.LAZY)
    private List<CobroPlanilla> listaCobrosPorPlanilla;
    @JoinColumn(name = "pai_codigo", referencedColumnName = "pai_codigo", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Pais pais;
    @JoinColumn(name = "tco_codigo", referencedColumnName = "tco_codigo", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private TipoColegiado tipoColegiado;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colegiado", fetch = FetchType.LAZY)
    private List<FormacionProfesional> listaFormacion;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colCodigo", fetch = FetchType.LAZY)
    private List<Transferencia> listaTransferencia;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colegiado", fetch = FetchType.LAZY)
    private List<DetalleSancion> listaDetalleSancion;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colCodigo", fetch = FetchType.LAZY)
    private List<ExperienciaLaboral> listaExpLaboral;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colCodigo", fetch = FetchType.LAZY)
    private List<Directivos> listaDirectivos;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colCodigo", fetch = FetchType.LAZY)
    private List<ReconocimientoColegiado> listaReconocimientoColegiados;
    //gilmar
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colCodigo", fetch = FetchType.LAZY)
    private List<GeneracionCuotas> listaGeneracionCuotas;   
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colCodigo", fetch = FetchType.LAZY)
    private List<DelegadoAcotacion> listaDelegadoAcotaciones;
    //fin gilmar
    //ingrid
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colegiado", fetch = FetchType.LAZY)
    private List<VotacionColegiado> listaVotacionesColegiado;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colegiado", fetch = FetchType.LAZY)
    private List<FondoMortuorio> listaFondosMortuorios;
    //fin ingrid
    @JoinColumn(name = "col_codigo", referencedColumnName = "per_codigo", nullable = false)
    @OneToOne(optional = false, fetch = FetchType.LAZY)
    private PersonaNatural personaNatural;

    @Transient
    private ConsejoDepartamental consejo;
    
    public ConsejoDepartamental getConsejo() {
        return consejo;
    }

    public void setConsejo(ConsejoDepartamental consejo) {
        this.consejo = consejo;
    }

    public Colegiado() {
    }

    public Colegiado(Long colCodigo) {
        this.solCodigo = colCodigo;
    }

    public Colegiado(Long colCodigo, String colnumeroCip, boolean colestaVivo) {
        this.solCodigo = colCodigo;
        this.colnumeroCip = colnumeroCip;
        this.colestaVivo = colestaVivo;
    }

    public List<FormacionProfesional> getListaFormacion() {
        return listaFormacion;
    }

    public void setListaFormacion(List<FormacionProfesional> listaFormacion) {
        this.listaFormacion = listaFormacion;
    }

    public String getColnumeroCip() {
        return colnumeroCip;
    }

    public void setColnumeroCip(String colnumeroCip) {
        this.colnumeroCip = colnumeroCip;
    }

    public boolean getColestaVivo() {
        return colestaVivo;
    }

    public void setColestaVivo(boolean colestaVivo) {
        this.colestaVivo = colestaVivo;
    }

    public Date getColfechaFallecio() {

        return colfechaFallecio;
    }

    public void setColfechaFallecio(Date colfechaFallecio) {
        this.colfechaFallecio = colfechaFallecio;
    }

    public String getColtipoSangre() {
        if(coltipoSangre == null) coltipoSangre ="-- no registra --";
        return coltipoSangre;
    }

    public void setColtipoSangre(String coltipoSangre) {
        this.coltipoSangre = coltipoSangre;
    }

    public Boolean getColCondicion() {
        return colCondicion;
    }

    public void setColCondicion(Boolean colCondicion) {
        this.colCondicion = colCondicion;
    }

    public Date getColfechaHabilidad() {
        return colfechaHabilidad;
    }

    public void setColfechaHabilidad(Date colfechaHabilidad) {
        this.colfechaHabilidad = colfechaHabilidad;
    }

    public Boolean getColesVitalicio() {
        return colesVitalicio;
    }

    public void setColesVitalicio(Boolean colesVitalicio) {
        this.colesVitalicio = colesVitalicio;
    }

    public Date getColfechaIncorporacion() {
        return colfechaIncorporacion;
    }

    public void setColfechaIncorporacion(Date colfechaIncorporacion) {
        this.colfechaIncorporacion = colfechaIncorporacion;
    }

    public List<ExoneracionDescuento> getExoneracionDescuentoCollection() {
        return exoneracionDescuentoCollection;
    }

    public void setExoneracionDescuentoCollection(List<ExoneracionDescuento> exoneracionDescuentoCollection) {
        this.exoneracionDescuentoCollection = exoneracionDescuentoCollection;
    }

    public List<RecepcionadorCertificado> getRecepcionadorCertificadoCollection() {
        return recepcionadorCertificadoCollection;
    }

    public void setRecepcionadorCertificadoCollection(List<RecepcionadorCertificado> recepcionadorCertificadoCollection) {
        this.recepcionadorCertificadoCollection = recepcionadorCertificadoCollection;
    }

    public List<ColegiadoEspecialidad> getColegiadoEspecialidadCollection() {
        return colegiadoEspecialidadCollection;
    }

    public void setColegiadoEspecialidadCollection(List<ColegiadoEspecialidad> colegiadoEspecialidadCollection) {
        this.colegiadoEspecialidadCollection = colegiadoEspecialidadCollection;
    }

    public List<DetalleSancion> getListaDetalleSancion() {
        return listaDetalleSancion;
    }

    public void setListaDetalleSancion(List<DetalleSancion> listaDetalleSancion) {
        this.listaDetalleSancion = listaDetalleSancion;
    }

    public List<Directivos> getListaDirectivos() {
        return listaDirectivos;
    }

    public void setListaDirectivos(List<Directivos> listaDirectivos) {
        this.listaDirectivos = listaDirectivos;
    }

    public Pais getPais() {
        return pais;
    }

    public void setPais(Pais pais) {
        this.pais = pais;
    }

    public TipoColegiado getTipoColegiado() {
        return tipoColegiado;
    }

    public void setTipoColegiado(TipoColegiado tipoColegiado) {
        this.tipoColegiado = tipoColegiado;
    }

    public List<Fraccionamiento> getFraccionamientoCollection() {
        return fraccionamientoCollection;
    }

    public void setFraccionamientoCollection(List<Fraccionamiento> fraccionamientoCollection) {
        this.fraccionamientoCollection = fraccionamientoCollection;
    }

    public List<Transferencia> getListaTransferencia() {
        return listaTransferencia;
    }

    public void setListaTransferencia(List<Transferencia> listaTransferencia) {
        this.listaTransferencia = listaTransferencia;
    }

    public String getIncorporacionCIP() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        return sdf.format(colfechaIncorporacion);
    }

    public List<ExperienciaLaboral> getListaExpLaboral() {
        return listaExpLaboral;
    }

    public void setListaExpLaboral(List<ExperienciaLaboral> listaExpLaboral) {
        this.listaExpLaboral = listaExpLaboral;
    }

    public Date getColfechaAporte() {
        return colfechaAporte;
    }

    public void setColfechaAporte(Date colfechaAporte) {
        this.colfechaAporte = colfechaAporte;
    }

    public List<ReconocimientoColegiado> getListaReconocimientoColegiados() {
        return listaReconocimientoColegiados;
    }

    public void setListaReconocimientoColegiados(List<ReconocimientoColegiado> listaReconocimientoColegiados) {
        this.listaReconocimientoColegiados = listaReconocimientoColegiados;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (solCodigo != null ? solCodigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Colegiado)) {
            return false;
        }
        Colegiado other = (Colegiado) object;
        if ((this.solCodigo == null && other.solCodigo != null) || (this.solCodigo != null && !this.solCodigo.equals(other.solCodigo))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "org.cip.esymons.colegiatura.be.Colegiado[colCodigo=" + solCodigo + "]";
    }

    /**
     * @return the listaGeneracionCuotas
     */
    public List<GeneracionCuotas> getListaGeneracionCuotas() {
        return listaGeneracionCuotas;
    }

    /**
     * @param listaGeneracionCuotas the listaGeneracionCuotas to set
     */
    public void setListaGeneracionCuotas(List<GeneracionCuotas> listaGeneracionCuotas) {
        this.listaGeneracionCuotas = listaGeneracionCuotas;
    }

    /**
     * @return the listaVotacionesColegiado
     */
    public List<VotacionColegiado> getListaVotacionesColegiado() {
        return listaVotacionesColegiado;
    }

    /**
     * @param listaVotacionesColegiado the listaVotacionesColegiado to set
     */
    public void setListaVotacionesColegiado(List<VotacionColegiado> listaVotacionesColegiado) {
        this.listaVotacionesColegiado = listaVotacionesColegiado;
    }

    /**
     * @return the listaFondosMortuorios
     */
    public List<FondoMortuorio> getListaFondosMortuorios() {
        return listaFondosMortuorios;
    }

    /**
     * @param listaFondosMortuorios the listaFondosMortuorios to set
     */
    public void setListaFondosMortuorios(List<FondoMortuorio> listaFondosMortuorios) {
        this.listaFondosMortuorios = listaFondosMortuorios;
    }

    /**
     * @return the listaCobrosPorPlanilla
     */
    public List<CobroPlanilla> getListaCobrosPorPlanilla() {
        return listaCobrosPorPlanilla;
    }

    /**
     * @param listaCobrosPorPlanilla the listaCobrosPorPlanilla to set
     */
    public void setListaCobrosPorPlanilla(List<CobroPlanilla> listaCobrosPorPlanilla) {
        this.listaCobrosPorPlanilla = listaCobrosPorPlanilla;
    }

    public List<DelegadoAcotacion> getListaDelegadoAcotaciones() {
        return listaDelegadoAcotaciones;
    }

    public void setListaDelegadoAcotaciones(List<DelegadoAcotacion> listaDelegadoAcotaciones) {
        this.listaDelegadoAcotaciones = listaDelegadoAcotaciones;
    }

    public Long getSolCodigo() {
        return solCodigo;
    }

    public void setSolCodigo(Long solCodigo) {
        this.solCodigo = solCodigo;
    }

    public PersonaNatural getPersonaNatural() {
        return personaNatural;
    }

    public void setPersonaNatural(PersonaNatural personaNatural) {
        this.personaNatural = personaNatural;
    }

    @Transient
    private ColegiadoEspecialidad colegiadoEspecialidad;

    public ColegiadoEspecialidad getColegiadoEspecialidad() {
        return colegiadoEspecialidad;
    }

    public void setColegiadoEspecialidad(ColegiadoEspecialidad colegiadoEspecialidad) {
        this.colegiadoEspecialidad = colegiadoEspecialidad;
    }

    @Transient
    private Transferencia transferencia;

    public Transferencia getTransferencia() {
        return transferencia;
    }

    public void setTransferencia(Transferencia transferencia) {
        this.transferencia = transferencia;
    }

    public String getFechaAporteCol(){

        SimpleDateFormat sdfa = new SimpleDateFormat("dd/MM/YYYY");
        return sdfa.format(colfechaAporte);
    }

    @Transient
    private DireccionPersona direccion;

    public DireccionPersona getDireccion() {
        return direccion;
    }

    public void setDireccion(DireccionPersona direccion) {
        this.direccion = direccion;
    }

    @Transient
    private TelefonoSolicitante telefono;

    public TelefonoSolicitante getTelefono() {
        return telefono;
    }

    public void setTelefono(TelefonoSolicitante telefono) {
        this.telefono = telefono;
    }

    @Transient
    private TelefonoSolicitante celular;

    public TelefonoSolicitante getCelular() {
        return celular;
    }

    public void setCelular(TelefonoSolicitante celular) {
        this.celular = celular;
    }
    

    
    
}
